home *** CD-ROM | disk | FTP | other *** search
/ Total Amazon - The Ultimate Rainforest Adventure / Total Amazon - The Ultimate Rainforest Adventure.iso / cccsci / tamazon.mst < prev    next >
Text File  |  1995-06-21  |  11KB  |  408 lines

  1. '**************************************************************************
  2. '*                       MSSetup Total Amazon setup script
  3. '**************************************************************************
  4.  
  5. '$DEFINE DEBUG  ''Define for script development/debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9.  
  10. ''Dialog ID's
  11. CONST ASKQUIT      = 200
  12. CONST DESTPATH     = 300
  13. CONST EXITFAILURE  = 400
  14. CONST EXITQUIT     = 600
  15. CONST EXITSUCCESS  = 700
  16. CONST OPTIONS      = 800
  17. CONST APPHELP      = 900
  18. CONST CUSTINST     = 6200
  19. CONST TOOBIG       = 6300
  20. CONST BADPATH      = 6400
  21.  
  22. ''Bitmap ID
  23. CONST LOGO         = 1
  24.  
  25. ''File Types
  26. CONST APPFILES     = 1
  27. CONST OPTFILES1    = 2
  28.  
  29. GLOBAL DEST$        ''Default destination directory.
  30. GLOBAL WINDRIVE$    ''Windows drive letter.
  31.  
  32. ''CustInst list symbol names
  33. GLOBAL APPNEEDS$    ''Option list costs per drive
  34. GLOBAL OPT1NEEDS$
  35. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  36. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  37.  
  38. ''Dialog list symbol names
  39. GLOBAL CHECKSTATES$
  40. GLOBAL STATUSTEXT$
  41. GLOBAL DRIVETEXT$
  42.  
  43. DECLARE SUB AddOptFilesToCopyList (ftype%)
  44. DECLARE SUB RecalcOptFiles (ftype%)
  45. DECLARE SUB RecalcPath
  46. DECLARE SUB SetDriveStatus
  47. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  48.  
  49. INIT:
  50.     CUIDLL$ = "mscuistf.dll"            ''custom user interface dll
  51.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  52.  
  53.     SetBitmap CUIDLL$, LOGO
  54.     SetTitle "Total Amazon Setup"
  55.  
  56.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  57.     IF szInf$ = "" THEN
  58.     szInf$ = GetSymbolValue("STF_CWDDIR") + "tamazon.INF"
  59.     END IF
  60.     ReadInfFile szInf$
  61.  
  62.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  63.     DEST$ = WINDRIVE$ + ":\CCCSCI"
  64.  
  65.     ''CustInst list symbols
  66.     CHECKSTATES$ = "CheckItemsState"
  67.     STATUSTEXT$  = "StatusItemsText"
  68.     DRIVETEXT$   = "DriveStatusText"
  69.     FOR i% = 1 TO 3 STEP 1
  70.     AddListItem CHECKSTATES$, "ON"
  71.     NEXT i%
  72.     FOR i% = 1 TO 3 STEP 1
  73.     AddListItem STATUSTEXT$, ""
  74.     NEXT i%
  75.     FOR i% = 1 TO 7 STEP 1
  76.     AddListItem DRIVETEXT$, ""
  77.     NEXT i%
  78.     ReplaceListItem DRIVETEXT$, 7, DEST$
  79.  
  80.     ''Disk cost list symbols
  81.     APPNEEDS$   = "AppNeeds"
  82.     OPT1NEEDS$  = "Opt1Needs"
  83.     EXTRACOSTS$ = "ExtraCosts"
  84.     BIGLIST$    = "BigList"
  85.     FOR i% = 1 TO 3 STEP 1
  86.     AddListItem BIGLIST$, ""
  87.     NEXT i%
  88.     FOR i% = 1 TO 26 STEP 1
  89.     AddListItem EXTRACOSTS$, "0"
  90.     NEXT i%
  91.  
  92.     RecalcPath
  93.     SetDriveStatus
  94.  
  95. '$IFDEF DEBUG
  96.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  97. '$ENDIF ''DEBUG
  98.  
  99. CUSTINST:
  100.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  101.  
  102.     IF sz$ = "CONTINUE" THEN
  103.     ''Install only if it will fit.
  104.     FOR i% = 1 TO 3 STEP 1
  105.         IF GetListItem(BIGLIST$, i%) <> "" THEN
  106.         GOSUB TOOBIG
  107.         GOTO CUSTINST
  108.         END IF
  109.     NEXT i%
  110.     UIPop 1
  111.     GOTO INSTALL
  112.     ELSEIF sz$ = "PATH" THEN
  113.     GOTO GETPATH
  114.     ELSEIF sz$ = "CHK1" THEN
  115.     RecalcOptFiles APPFILES
  116.     SetDriveStatus
  117.     GOTO CUSTINST
  118.     ELSEIF sz$ = "CHK2" THEN
  119.     RecalcOptFiles OPTFILES1
  120.     SetDriveStatus
  121.     GOTO CUSTINST
  122.     ELSEIF sz$ = "REACTIVATE" THEN
  123.     RecalcPath
  124.     SetDriveStatus
  125.     GOTO CUSTINST
  126.     ELSE
  127.     GOSUB ASKQUIT
  128.     GOTO CUSTINST
  129.     END IF
  130.  
  131. INSTALL:
  132.     RemoveIniSection "win.ini", "CCCStartupCfg", cmoNone
  133.     CreateIniKeyValue "win.ini", "CCCStartupCfg", "InstallModeParam", "CccStudentSt", cmoNone
  134.     ClearCopyList
  135.     AddOptFilesToCopyList APPFILES
  136.     AddOptFilesToCopyList OPTFILES1
  137.     SrcDir$ = ""
  138.     CreateDir DEST$, cmoNone
  139.     CopyFilesInCopyList
  140.  
  141.     IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  142.     CreateProgmanGroup "Smithsonian", "CCCSCI", cmoNone
  143.     ShowProgmanGroup  "Smithsonian", 1, cmoNone
  144.     CreateProgmanItem "Smithsonian", "Total Amazon", MakePath(DEST$,"aw_c.exe ")+MakePath(DEST$,"tamazon\tamazon.prj"), MakePath(DEST$,"tamazon.ico"), cmoOverwrite
  145.     CreateProgmanItem "Smithsonian", "Read Me", MakePath(DEST$,"readme.wri"), MakePath(DEST$,"readme.ico"), cmoOverwrite
  146.     END IF
  147.  
  148. QUIT:
  149.     ON ERROR GOTO ERRQUIT
  150.  
  151.     IF ERR = 0 THEN
  152. rem Update WIN.INI and SYSTEM.INI and CONTROL.INI
  153. rem -----------------------------
  154.     dlg% = EXITSUCCESS
  155.     ELSEIF ERR = STFQUIT THEN
  156.     dlg% = EXITQUIT
  157.     ELSE
  158.     dlg% = EXITFAILURE
  159.     END IF
  160. QUITL1:
  161.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  162.     IF sz$ = "REACTIVATE" THEN
  163.     GOTO QUITL1
  164.     END IF
  165.     UIPop 1
  166.  
  167.     END
  168.  
  169. ERRQUIT:
  170.     i% = DoMsgBox("Setup sources were corrupted! Contact CCC Customer Support.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  171.     END
  172.  
  173.  
  174.  
  175. GETPATH:
  176.     SetSymbolValue "EditTextIn", DEST$
  177.     SetSymbolValue "EditFocus", "END"
  178. GETPATHL1:
  179.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  180.  
  181.     IF sz$ = "CONTINUE" THEN
  182.     olddest$ = DEST$
  183.     DEST$ = GetSymbolValue("EditTextOut")
  184.  
  185.     ''Validate new path.
  186.     IF IsDirWritable(DEST$) = 0 THEN
  187.         GOSUB BADPATH
  188.         DEST$ = olddest$
  189.         GOTO GETPATHL1
  190.     END IF
  191.     UIPop 1
  192.  
  193.     ''Truncate display if too long.
  194.     IF LEN(DEST$) > 23 THEN
  195.         ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  196.     ELSE
  197.         ReplaceListItem DRIVETEXT$, 7, DEST$
  198.     END IF
  199.  
  200.     ''Recalc if path changed.
  201.     IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  202.         RecalcPath
  203.         SetDriveStatus
  204.     END IF
  205.  
  206.     olddest$ = ""
  207.     GOTO CUSTINST
  208.     ELSEIF sz$ = "REACTIVATE" THEN
  209.     RecalcPath
  210.     SetDriveStatus
  211.     GOTO GETPATHL1
  212.     ELSEIF sz$ = "EXIT" THEN
  213.     GOSUB ASKQUIT
  214.     GOTO GETPATHL1
  215.     ELSE
  216.     UIPop 1
  217.     GOTO CUSTINST
  218.     END IF
  219.  
  220. TOOBIG:
  221.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  222.     IF sz$ = "REACTIVATE" THEN
  223.     RecalcPath
  224.     SetDriveStatus
  225.     GOTO TOOBIG
  226.     END IF
  227.     UIPop 1
  228.     RETURN
  229.  
  230. BADPATH:
  231.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  232.     IF sz$ = "REACTIVATE" THEN
  233.     RecalcPath
  234.     SetDriveStatus
  235.     GOTO BADPATH
  236.     END IF
  237.     UIPop 1
  238.     RETURN
  239.  
  240. ASKQUIT:
  241.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  242.  
  243.     IF sz$ = "EXIT" THEN
  244.     UIPopAll
  245.     ERROR STFQUIT
  246.     ELSEIF sz$ = "REACTIVATE" THEN
  247.     GOTO ASKQUIT
  248.     ELSE
  249.     UIPop 1
  250.     END IF
  251.     RETURN
  252.  
  253. '**
  254. '** Purpose:
  255. '**     Adds the specified option files to the copy list.
  256. '** Arguments:
  257. '**     ftype%  - type of files to add, one of the following:
  258. '**             APPFILES, OPTFILES1, OPTFILES2
  259. '** Returns:
  260. '**     none.
  261. '*************************************************************************
  262. SUB AddOptFilesToCopyList (ftype%) STATIC
  263.  
  264.     IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  265.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  266.     IF ftype% = APPFILES THEN
  267.         AddSectionFilesToCopyList "AppFiles", SrcDir$, DEST$
  268.     ELSEIF ftype% = OPTFILES1 THEN
  269.         AddSectionFilesToCopyList "OptFiles1", SrcDir$, DEST$
  270.     END IF
  271.     SrcDir$ = ""
  272.     END IF
  273. END SUB
  274.  
  275.  
  276. '**
  277. '** Purpose:
  278. '**     Recalculates disk space for the given option files and sets
  279. '**     the status info symbol "StatusItemsText".
  280. '** Arguments:
  281. '**     ftype% - type of files to add, one of the following:
  282. '**             APPFILES, OPTFILES1, OPTFILES2
  283. '** Returns:
  284. '**     none.
  285. '*************************************************************************
  286. SUB RecalcOptFiles (ftype%) STATIC
  287.     CursorSave% = ShowWaitCursor()
  288.     ClearCopyList
  289.     AddOptFilesToCopyList ftype%
  290.     SrcDir$ = ""
  291.  
  292.     fExtra% = 0
  293.     IF ftype% = APPFILES THEN
  294.     ListSym$ = APPNEEDS$
  295.     IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  296.         ''Add extra cost to Windows drive for ini/progman, etc.
  297.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  298.         ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  299.         fExtra% = 1
  300.     END IF
  301.     ELSEIF ftype% = OPTFILES1 THEN
  302.     ListSym$ = OPT1NEEDS$
  303.     END IF
  304.  
  305.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  306.  
  307.     cost& = 0
  308.     FOR i% = 1 TO 26 STEP 1
  309.     cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  310.     NEXT i%
  311.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  312.  
  313.     IF StillNeed& > 0 THEN
  314.     ReplaceListItem BIGLIST$, ftype%, "YES"
  315.     ELSE
  316.     ReplaceListItem BIGLIST$, ftype%, ""
  317.     END IF
  318.  
  319.     IF fExtra% THEN
  320.     ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  321.     END IF
  322.     RestoreCursor CursorSave%
  323.     ListSym$ = ""
  324. END SUB
  325.  
  326.  
  327. '**
  328. '** Purpose:
  329. '**     Recalculates disk space and sets option status info according
  330. '**     to the current destination path.
  331. '** Arguments:
  332. '**     none.
  333. '** Returns:
  334. '**     none.
  335. '*************************************************************************
  336. SUB RecalcPath STATIC
  337.  
  338.     CursorSave% = ShowWaitCursor()
  339.  
  340.     RecalcOptFiles APPFILES
  341.     RecalcOptFiles OPTFILES1
  342.     
  343.     RestoreCursor CursorSave%
  344. END SUB
  345.  
  346.  
  347. '**
  348. '** Purpose:
  349. '**     Sets drive status info according to latest disk space calcs.
  350. '** Arguments:
  351. '**     none.
  352. '** Returns:
  353. '**     none.
  354. '*************************************************************************
  355. SUB SetDriveStatus STATIC
  356.  
  357.     drive$ = MID$(DEST$, 1, 1)
  358.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  359.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%))
  360.     free& = GetFreeSpaceForDrive(drive$)
  361.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  362.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  363.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  364.  
  365.     IF drive$ = WINDRIVE$ THEN
  366.     ReplaceListItem DRIVETEXT$, 4, ""
  367.     ReplaceListItem DRIVETEXT$, 5, ""
  368.     ReplaceListItem DRIVETEXT$, 6, ""
  369.     ELSE
  370.     ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  371.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%))
  372.     IF cost& = 0 THEN
  373.         ReplaceListItem DRIVETEXT$, 4, ""
  374.         ReplaceListItem DRIVETEXT$, 5, ""
  375.         ReplaceListItem DRIVETEXT$, 6, ""
  376.     ELSE
  377.         free& = GetFreeSpaceForDrive(WINDRIVE$)
  378.         ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  379.         ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  380.         ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  381.     END IF
  382.     END IF
  383. END SUB
  384.  
  385.  
  386. '**
  387. '** Purpose:
  388. '**     Appends a file name to the end of a directory path,
  389. '**     inserting a backslash character as needed.
  390. '** Arguments:
  391. '**     szDir$  - full directory path (with optional ending "\")
  392. '**     szFile$ - filename to append to directory
  393. '** Returns:
  394. '**     Resulting fully qualified path name.
  395. '*************************************************************************
  396. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  397.     IF szDir$ = "" THEN
  398.     MakePath = szFile$
  399.     ELSEIF szFile$ = "" THEN
  400.     MakePath = szDir$
  401.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  402.     MakePath = szDir$ + szFile$
  403.     ELSE
  404.     MakePath = szDir$ + "\" + szFile$
  405.     END IF
  406. END FUNCTION
  407.  
  408.